import matplotlib.pyplot as plt
import matplotlib.font_manager
import matplotlib as mpl


# mpl.rcParams['font.family'] = 'PingFang SC' 


def create_ranking_chart(sorted_scoreboard_data, file_path, is_reversed=True):
    """
    根据排序后的计分板数据生成排名图表并保存为文件。

    参数:
    sorted_scoreboard_data (list): 排序后的计分板数据列表，每个元素是一个字典，包含 'playername' 和 'data' 键。
    file_path (str): 保存图表的文件路径。
    """
    # 提取玩家姓名和数据
    playernames = [entry['playername'] for entry in sorted_scoreboard_data]
    data = [entry['data'] for entry in sorted_scoreboard_data]

    # # 按照成绩升序排列
    # sorted_scoreboard_data = sorted(sorted_scoreboard_data, key=lambda x: x['data'], reverse=is_reversed)
    # playernames = [entry['playername'] for entry in sorted_scoreboard_data]
    # data = [entry['data'] for entry in sorted_scoreboard_data]
    
    # 固定条形的高度为宽度的十分之一
    bar_height = 0.8  # 设置较小的条形高度，减少间距

    # 设置图表的大小，图表的高度自适应条形数量
    plt.figure(figsize=(10, len(data) * bar_height))  # 高度根据条形数量调整，+2 给标题和标签留空间
    
    # 创建条形图
    bars = plt.barh(playernames, data, height=bar_height, color='skyblue')
    
    # 添加文本到条形图中
    for bar in bars:
        width = bar.get_width()  # 获取条形的宽度
        plt.text(width, bar.get_y() + bar.get_height() / 2, f'{width} s', va='center', ha='left', fontsize=15, fontweight='bold')
    
    # 设置图表标题和标签
    plt.title('Parkour S8 Ranks Chart')
    plt.xlabel('Score (second)')
    plt.ylabel('Player Name')
    
    plt.margins(y=0.05)  # 减少y轴方向的边距

    # 自动调整布局，减少空白
    plt.tight_layout()
    
    # 保存图表
    plt.savefig(file_path)
    plt.close()

# 示例用法：
# sorted_scoreboard_data = [{'playername': 'Player1', 'data': 10}, {'playername': 'Player2', 'data': 30}, ...]
# create_ranking_chart(sorted_scoreboard_data, 'ranking_chart.png')

if __name__ == '__main__':
    sorted_scoreboard_data = [
        {'playername': 'Player1', 'data': 10}, 
        {'playername': 'Player2', 'data': 30},
        {'playername': 'Player3', 'data': 20},
        {'playername': 'Player4', 'data': 30},
        {'playername': 'Player5', 'data': 30},
        {'playername': 'Player6', 'data': 30},
        {'playername': 'Player7', 'data': 30},
        {'playername': 'Player8', 'data': 30},
        {'playername': 'Player9', 'data': 30},
        {'playername': 'Player10', 'data': 30},
        {'playername': 'Player11', 'data': 30},
    ]

    
    create_ranking_chart(sorted_scoreboard_data, "ranking_chart.png")
    

    font_names = [f.name for f in matplotlib.font_manager.fontManager.ttflist]

    # 打印所有字体名称
    for name in sorted(font_names):
        print(name)
